/*
 * @(#)WebColorChooserPanel.java	1.0 Apr 27, 2008
 *
 *	The MIT License
 *
 *	Copyright (c) 2008 Malachi de AElfweald <malachid@gmail.com>
 *
 *	Permission is hereby granted, free of charge, to any person obtaining a copy
 *	of this software and associated documentation files (the "Software"), to deal
 *	in the Software without restriction, including without limitation the rights
 *	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 *	copies of the Software, and to permit persons to whom the Software is
 *	furnished to do so, subject to the following conditions:
 *
 *	The above copyright notice and this permission notice shall be included in
 *	all copies or substantial portions of the Software.
 *
 *	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *	IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *	FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *	AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *	LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *	OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *	THE SOFTWARE.
 */
package org.eoti.swing.panels;

import org.eoti.awt.ColorUtil;
import org.eoti.awt.WebColor;

import javax.swing.colorchooser.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class WebColorChooserPanel
extends AbstractColorChooserPanel
		implements ActionListener
{
	protected JComboBox comboBox;
	protected static String customString = "<Custom>";

	public void updateChooser()
	{
		Color color = this.getColorFromModel();
		WebColor webColor = ColorUtil.getWebColor( color );
		if(webColor == null)
            comboBox.setSelectedItem( customString );
		else
            comboBox.setSelectedItem(webColor.toString());
	}

	protected void buildChooser()
	{
		comboBox = new JComboBox();
		for(WebColor wc : WebColor.values())
			comboBox.addItem(wc.toString());

		comboBox.addItem(customString);
		comboBox.setSelectedItem(customString);
		comboBox.addActionListener(this);
		add(comboBox);
	}

	public String getDisplayName()
	{
		return "WebColor";
	}

	public Icon getSmallDisplayIcon()
	{
		return null;
	}

	public Icon getLargeDisplayIcon()
	{
		return null;
	}

	public void actionPerformed(ActionEvent e)
	{
		WebColor webColor = getWebColor();
		if(webColor != null)
			this.getColorSelectionModel().setSelectedColor( webColor.getColor() );

		// don't do anything if they choose custom
		// this allows another panel to set it to some specific RGB
	}

	public void addPanel(JColorChooser chooser)
	{
		chooser.addChooserPanel(this);
	}

	public JColorChooser createColorChooser(boolean useDefaultPanels)
	{
		JColorChooser chooser = new JColorChooser();
		if(!useDefaultPanels)
		{
			AbstractColorChooserPanel[] panels = chooser.getChooserPanels();
			for(AbstractColorChooserPanel panel : panels)
				chooser.removeChooserPanel(panel);
		}

		addPanel(chooser);
		return chooser;
	}

	public WebColor getWebColor()
	{
		try{
			return ColorUtil.getWebColor((String)comboBox.getSelectedItem());
		}catch(IllegalArgumentException iae){
			// don't do anything if they choose custom
			// this allows another panel to set it to some specific RGB
		}

		return null;
	}


}
